/**
 * 代码 写的越接近底层代码越好 这期间的开销越小
 * */

#include <stdio.h>

int main()
{
    int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
    // 数组名 | 是什么
    // 数组名的值是数组首元素的指针常量
    printf("%d \n", a);
    printf("%d \n", &a[0]);

    // 数组名不是指针，但大多数使用到数组名的地方，编译器都会把数组名隐式转换成一个指向数组首元素的指针。只有两种情况下例外：
    // 对数组名使用sizeof运算符：
    printf("sizeOf %d", sizeof(a));
    // 得到的是整个数组的大小

    // 第二种是对数组名取地址
    printf("%d \n", &a);
    // 运算结果是数组的地址。注意，数组的地址和数组首元素的地址是不同的概念，尽管二者的值是相同的。
    // 该指针移动一次后 偏移的大小是数组的大小，
    printf("%d \n", &a[0]);
    // 该指针移动一次后 偏移的大小是数组单个元素的大小
}
